/**
 * Request请求自动填充请求参数
 * @param config
 */
export function requestParamAutoFill(config) {
  if (config.url !== 'api/dictDetail' && config.url !== 'auth/info' && config.url !== 'api/menus/build' &&
    config.url !== 'auth/code' && config.url !== 'auth/refreshToken' && config.url !== 'auth/login') {
    switch (config.method.toLowerCase()) {
      case 'get':
        toGet(config)
        break
      case 'post':
        toPost(config)
        break
      case 'put':
        toPut(config)
        break
      case 'delete':
        toDelete(config)
        break
    }
  }
}

/**
 * GET请求自动填充请求参数
 * @param config
 */
export function toGet(config) {
  const appInfo = localStorage.getItem('appInfo')
  if (appInfo) {
    const appInfo = JSON.parse(localStorage.getItem('appInfo'))
    config.url = addAppInfoToGetParam(config.url, appInfo)
  }
}

/**
 * Post自动填充参数
 * @param config
 */
export function toPost(config) {
  if (config.data && localStorage.getItem('appInfo')) {
    const appInfo = JSON.parse(localStorage.getItem('appInfo'))
    addAppInfoToPostParam(config.data, appInfo, config)
  }
}

/**
 * Put自动填充参数
 * @param config
 */
export function toPut(config) {

}

/**
 * Delte自动填充参数
 * @param config
 */
export function toDelete(config) {

}

export function addAppInfoToPostParam(data, appInfo, config) {
  if (typeof data !== 'string') {
    setAppCode(data, appInfo.appCode)
  } else {
    setAppCode(JSON.parse(data), appInfo.appCode)
    data = JSON.stringify(data)
  }
}

export function setAppCode(data, appCode) {
  if (!data.hasOwnProperty('appCode') || data.appCode === null || data.appCode === '') {
    data.appCode = appCode
  }
}

export function addAppInfoToGetParam(url, appInfo) {
  let paramsString = (url.split('?').length > 1) ? url.split('?')[1] : ''
  const params = new URLSearchParams('?' + paramsString)
  if (!params.has('appCode')) {
    params.set('appCode', appInfo.appCode)
  }
  paramsString = params.toString()
  return url.split('?')[0] + '?' + paramsString
}
